/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package familytree.negocio.bo;

import familytree.negocio.IAlbumProcessor;
import familytree.negocio.IArbolProcessor;
import familytree.negocio.INodoProcessor;
import familytree.negocio.IParejaProcessor;
import familytree.negocio.bo.ArbolBO;
import familytree.persistencia.dao.DAOFactory;
import familytree.persistencia.dao.ParejaDAO;
import familytree.persistencia.dao.hibernate.HibernateParejaDAO;
import familytree.persistencia.pojos.Nodo;
import familytree.persistencia.pojos.Pareja;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

/**
 *
 * @author Jose Antonio
 */
public class ParejaBO implements IParejaProcessor {
    
     private DAOFactory dAOFactory = DAOFactory.instance(DAOFactory.HIBERNATE);
    
    public  Pareja getPareja(String idPareja){
        ParejaDAO parejaDAO = dAOFactory.getParejaDAO();
        return parejaDAO.findById(idPareja,false);
    }
    
    
    public  void deletePareja(String idPareja){
         ParejaDAO parejaDAO = dAOFactory.getParejaDAO();
         parejaDAO.makeTransient(idPareja);
    }
    public  void setPareja(Pareja pareja)
    {
        ParejaDAO parejaDAO = dAOFactory.getParejaDAO();
        parejaDAO.makePersistent(pareja);
    }
    /**
     * Añade una pareja a partir de los nodos padre y madre
     *@param madre Primero recibe la madre
     * @param padre El segundo elemento es el padre
     */
    public void setPareja(Nodo madre, Nodo padre){
        Pareja pareja = new Pareja();
        pareja.setComponente1(padre);
        pareja.setComponente2(madre);
        setPareja(pareja);
    }
    
    public Pareja getParejaPorIdPareja(String idPareja){
       ParejaDAO parejaDAO = dAOFactory.getParejaDAO();
       Pareja pareja = parejaDAO.getParejaPorIdPareja(idPareja);
       if (pareja!=null){
            return pareja;
       }
       else{
        return null;
       }
    }
    
    public void anadirMadre(Nodo madre, Nodo h){
        Pareja padres = null;
        INodoProcessor nodoBd = new NodoBO();
        Nodo hijo = nodoBd.getNodoPorIdNodo(h.getIdNodo());
        if(hijo.getPadres() == null){
            padres = new Pareja();
        }
        else{
            padres = hijo.getPadres();
        }
        //Añadimos a la madre el idArbol del hijo
        madre.setArbol(hijo.getArbol());
        madre.setSexo("femenino");
        padres.setComponente2(madre);
        padres.addHijos(hijo);
        hijo.setPadres(padres);
        IArbolProcessor arbolBd = new ArbolBO();
        arbolBd.anadirMadre(padres, madre, hijo);
    }
    public void anadirPadre(Nodo padre, Nodo h){
        Pareja padres = null;
         INodoProcessor nodoBd = new NodoBO();
        Nodo hijo = nodoBd.getNodoPorIdNodo(h.getIdNodo());
        if(hijo.getPadres() == null){
            padres = new Pareja();
        }
        else{
            padres = hijo.getPadres();
        }
         padre.setArbol(hijo.getArbol());
        padre.setSexo("masculino");
        padres.setComponente1(padre);
        padres.addHijos(hijo);
        hijo.setPadres(padres);
        
       
        IArbolProcessor arbolBd = new ArbolBO();
        arbolBd.anadirPadre(padres,padre,hijo);
    }
    
    
    
    /*
    public void anadirHijo(Nodo nodoActual,String idPareja,Nodo nodoHijo){
        
        Pareja pareja = getParejaPorIdPareja(idPareja);
        nodoHijo.setPadres(pareja);
        nodoHijo.setArbol(nodoActual.getArbol());
        pareja.addHijos(nodoHijo);
        
        IArbolProcessor arbolBd = new ArbolBO();
        arbolBd.anadirHijo(pareja, nodoHijo);
          
    }
    */
}
